import getScrollHeight from './getScrollHeight';
import getScrollTop from './getScrollTop';

const Hz = 1000/60;
var requestAnimFrame = (function(){
    return  window.requestAnimationFrame       ||
        window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame    ||
        function( callback ){
            window.setTimeout(callback, Hz);
        };
})();

/**
 * 平滑滚动到顶部
 * @param targetElement 可以指定目标元素
 */
export default function goTop(targetElement){
    var scrollHeight=getScrollHeight(targetElement);
    //1秒钟滚动完
    const time = 1000;
    var step=-scrollHeight*Hz/time;
    var scrollTopBy=targetElement?function(value){ //注意：此处的value是个负数
        //获取scrollTop值，//声明了DTD的标准网页取document.documentElement.scrollTop，否则取document.body.scrollTop；因为二者只有一个会生效，另一个就恒为0，所以取和值可以得到网页的真正的scrollTop值
        var sTop=getScrollTop(targetElement);
        sTop+=value;
        targetElement.scrollTop=sTop>0?sTop:0;
        return sTop;
    }:function(value){
        window.scrollBy(0, value);
        //获取scrollTop值，//声明了DTD的标准网页取document.documentElement.scrollTop，否则取document.body.scrollTop；因为二者只有一个会生效，另一个就恒为0，所以取和值可以得到网页的真正的scrollTop值
        return getScrollTop();
    };
    var scroll=function(){
        //把内容滚动指定的像素数（第一个参数是向右滚动的像素数，第二个参数是向下滚动的像素数）
        var sTop=scrollTopBy(step);
        //延时递归调用，模拟滚动向上效果
        if(sTop>0){
            requestAnimFrame(scroll);
        }
    };
    scroll();
}